/**
 * WMS业务组件类型定义
 *
 * 定义所有业务相关的组件接口、类型和常量
 * 包含WMS核心业务实体和业务逻辑类型
 */

/**
 * 基础业务实体接口
 */
export interface WmsBaseEntity {
  /** 主键ID */
  id?: number;
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
  /** 创建人ID */
  createBy?: number;
  /** 更新人ID */
  updateBy?: number;
  /** 删除标记 */
  delFlag?: number;
  /** 版本号 */
  version?: number;
  /** 备注 */
  remark?: string;
}

/**
 * 仓库信息类型
 */
export interface WmsWarehouse extends WmsBaseEntity {
  /** 仓库编码 */
  warehouseCode: string;
  /** 仓库名称 */
  warehouseName: string;
  /** 仓库类型 */
  warehouseType?: number;
  /** 仓库状态 */
  status: number;
  /** 仓库地址 */
  address?: string;
  /** 联系人 */
  contact?: string;
  /** 联系电话 */
  phone?: string;
  /** 面积 */
  area?: number;
  /** 负责人ID */
  managerId?: number;
  /** 负责人姓名 */
  managerName?: string;
}

/**
 * 库区信息类型
 */
export interface WmsArea extends WmsBaseEntity {
  /** 库区编码 */
  areaCode: string;
  /** 库区名称 */
  areaName: string;
  /** 所属仓库ID */
  warehouseId: number;
  /** 所属仓库名称 */
  warehouseName?: string;
  /** 库区类型 */
  areaType?: number;
  /** 库区状态 */
  status: number;
  /** 面积 */
  area?: number;
  /** 最大容量 */
  maxCapacity?: number;
  /** 当前使用量 */
  currentCapacity?: number;
  /** 温度要求 */
  temperature?: string;
  /** 湿度要求 */
  humidity?: string;
}

/**
 * 商户信息类型
 */
export interface WmsMerchant extends WmsBaseEntity {
  /** 商户编码 */
  merchantCode: string;
  /** 商户名称 */
  merchantName: string;
  /** 商户类型 */
  merchantType?: number;
  /** 商户状态 */
  status: number;
  /** 联系人 */
  contact?: string;
  /** 联系电话 */
  phone?: string;
  /** 邮箱 */
  email?: string;
  /** 地址 */
  address?: string;
  /** 信用等级 */
  creditLevel?: number;
  /** 余额 */
  balance?: number;
  /** 业务员ID */
  salesmanId?: number;
  /** 业务员姓名 */
  salesmanName?: string;
}

/**
 * 商品信息类型
 */
export interface WmsItem extends WmsBaseEntity {
  /** 商品编码 */
  itemCode: string;
  /** 商品名称 */
  itemName: string;
  /** 商品分类ID */
  itemCategory?: number;
  /** 商品分类名称 */
  itemCategoryName?: string;
  /** 商品品牌ID */
  itemBrand?: number;
  /** 商品品牌名称 */
  itemBrandName?: string;
  /** 商品单位 */
  unit: string;
  /** 商品状态 */
  status: number;
  /** 商品描述 */
  description?: string;
  /** 商品图片 */
  images?: string[];
  /** SKU列表 */
  skuList?: WmsItemSku[];
}

/**
 * 商品SKU信息类型
 */
export interface WmsItemSku extends WmsBaseEntity {
  /** SKU编码 */
  skuCode?: string;
  /** SKU名称 */
  skuName: string;
  /** 商品ID */
  itemId: number;
  /** 条形码 */
  barcode?: string;
  /** 成本价 */
  costPrice?: number;
  /** 销售价 */
  sellingPrice?: number;
  /** 净重 */
  netWeight?: number;
  /** 毛重 */
  grossWeight?: number;
  /** 长度 */
  length?: number;
  /** 宽度 */
  width?: number;
  /** 高度 */
  height?: number;
  /** 体积 */
  volume?: number;
  /** SKU状态 */
  status: number;
  /** 规格属性 */
  attributes?: Record<string, any>;
}

/**
 * 库存信息类型
 */
export interface WmsInventory extends WmsBaseEntity {
  /** 商品ID */
  itemId: number;
  /** SKU ID */
  skuId: number;
  /** 仓库ID */
  warehouseId: number;
  /** 库区ID */
  areaId?: number;
  /** 库位ID */
  locationId?: number;
  /** 总数量 */
  totalQuantity: number;
  /** 可用数量 */
  availableQuantity: number;
  /** 锁定数量 */
  lockedQuantity: number;
  /** 在途数量 */
  inTransitQuantity: number;
  /** 预警数量 */
  warningQuantity?: number;
  /** 最大库存 */
  maxQuantity?: number;
  /** 最小库存 */
  minQuantity?: number;
  /** 库存状态 */
  status: number;
  /** 商品信息 */
  item?: WmsItem;
  /** SKU信息 */
  sku?: WmsItemSku;
  /** 仓库信息 */
  warehouse?: WmsWarehouse;
  /** 库区信息 */
  area?: WmsArea;
}

/**
 * 订单基础信息类型
 */
export interface WmsOrder extends WmsBaseEntity {
  /** 订单编号 */
  orderNo: string;
  /** 订单类型 */
  orderType: string;
  /** 订单状态 */
  status: number;
  /** 商户ID */
  merchantId?: number;
  /** 商户名称 */
  merchantName?: string;
  /** 仓库ID */
  warehouseId: number;
  /** 仓库名称 */
  warehouseName?: string;
  /** 计划时间 */
  planTime?: string;
  /** 完成时间 */
  finishTime?: string;
  /** 操作员ID */
  operatorId?: number;
  /** 操作员姓名 */
  operatorName?: string;
  /** 总数量 */
  totalQuantity?: number;
  /** 总金额 */
  totalAmount?: number;
  /** 订单明细 */
  details?: WmsOrderDetail[];
}

/**
 * 订单明细类型
 */
export interface WmsOrderDetail extends WmsBaseEntity {
  /** 订单ID */
  orderId: number;
  /** 商品ID */
  itemId: number;
  /** SKU ID */
  skuId: number;
  /** 计划数量 */
  planQuantity: number;
  /** 实际数量 */
  actualQuantity?: number;
  /** 单价 */
  unitPrice?: number;
  /** 总价 */
  totalPrice?: number;
  /** 仓库ID */
  warehouseId?: number;
  /** 库区ID */
  areaId?: number;
  /** 库位ID */
  locationId?: string;
  /** 明细状态 */
  status: number;
  /** 商品信息 */
  item?: WmsItem;
  /** SKU信息 */
  sku?: WmsItemSku;
}

/**
 * 入库单类型
 */
export interface WmsReceiptOrder extends WmsOrder {
  /** 供应商ID */
  supplierId?: number;
  /** 供应商名称 */
  supplierName?: string;
  /** 采购单号 */
  purchaseOrderNo?: string;
  /** 收货类型 */
  receiptType: string;
  /** 收货时间 */
  receiptTime?: string;
  /** 质检状态 */
  qualityStatus?: number;
}

/**
 * 出库单类型
 */
export interface WmsShipmentOrder extends WmsOrder {
  /** 客户ID */
  customerId?: number;
  /** 客户名称 */
  customerName?: string;
  /** 销售单号 */
  salesOrderNo?: string;
  /** 出库类型 */
  shipmentType: string;
  /** 发货时间 */
  shipmentTime?: string;
  /** 配送地址 */
  deliveryAddress?: string;
  /** 物流公司 */
  logisticsCompany?: string;
  /** 物流单号 */
  trackingNo?: string;
}

/**
 * 移库单类型
 */
export interface WmsMovementOrder extends WmsOrder {
  /** 源仓库ID */
  sourceWarehouseId: number;
  /** 源仓库名称 */
  sourceWarehouseName?: string;
  /** 目标仓库ID */
  targetWarehouseId: number;
  /** 目标仓库名称 */
  targetWarehouseName?: string;
  /** 移库类型 */
  movementType: string;
  /** 移库原因 */
  movementReason?: string;
}

/**
 * 盘点单类型
 */
export interface WmsCheckOrder extends WmsOrder {
  /** 盘点类型 */
  checkType: string;
  /** 盘点范围 */
  checkScope?: string;
  /** 盘点方式 */
  checkMethod?: string;
  /** 盘点结果 */
  checkResult?: string;
  /** 差异说明 */
  differenceReason?: string;
}

/**
 * 业务组件选择器配置类型
 */
export interface WmsSelectConfig<T = any> {
  /** 数据源 */
  options: T[];
  /** 值字段名 */
  valueField: keyof T;
  /** 标签字段名 */
  labelField: keyof T;
  /** 是否可搜索 */
  filterable?: boolean;
  /** 是否可清空 */
  clearable?: boolean;
  /** 是否多选 */
  multiple?: boolean;
  /** 占位符 */
  placeholder?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 加载状态 */
  loading?: boolean;
  /** 远程搜索方法 */
  remoteMethod?: (query: string) => Promise<T[]>;
}

/**
 * 级联选择器配置类型
 */
export interface WmsCascaderConfig<T = any> {
  /** 数据源 */
  options: T[];
  /** 配置选项 */
  props: {
    value: keyof T;
    label: keyof T;
    children?: keyof T;
    disabled?: keyof T;
    leaf?: keyof T;
  };
  /** 是否可搜索 */
  filterable?: boolean;
  /** 是否可清空 */
  clearable?: boolean;
  /** 是否显示完整路径 */
  showAllLevels?: boolean;
  /** 分隔符 */
  separator?: string;
  /** 占位符 */
  placeholder?: string;
  /** 懒加载方法 */
  lazyLoad?: (node: any, resolve: (data: T[]) => void) => void;
}

/**
 * 树形组件配置类型
 */
export interface WmsTreeConfig<T = any> {
  /** 数据源 */
  data: T[];
  /** 配置选项 */
  props: {
    children: keyof T;
    label: keyof T;
    disabled?: keyof T;
    isLeaf?: keyof T;
  };
  /** 是否显示复选框 */
  showCheckbox?: boolean;
  /** 是否默认展开所有节点 */
  defaultExpandAll?: boolean;
  /** 默认展开的节点key数组 */
  defaultExpandedKeys?: any[];
  /** 默认选中的节点key数组 */
  defaultCheckedKeys?: any[];
  /** 是否可拖拽 */
  draggable?: boolean;
  /** 拖拽时判定目标节点能否被放置 */
  allowDrop?: (draggingNode: any, dropNode: any, type: string) => boolean;
  /** 懒加载方法 */
  load?: (node: any, resolve: (data: T[]) => void) => void;
}

/**
 * 条码扫描配置类型
 */
export interface WmsBarcodeScanConfig {
  /** 扫描模式 */
  mode: "single" | "multiple" | "continuous";
  /** 支持的条码类型 */
  codeTypes?: string[];
  /** 扫描成功回调 */
  onScan?: (code: string, type: string) => void;
  /** 扫描错误回调 */
  onError?: (error: Error) => void;
  /** 是否显示扫描框 */
  showScanArea?: boolean;
  /** 是否开启声音提示 */
  enableSound?: boolean;
  /** 是否开启震动提示 */
  enableVibration?: boolean;
}

/**
 * 数据统计配置类型
 */
export interface WmsStatisticsConfig {
  /** 统计类型 */
  type: "chart" | "table" | "card" | "number";
  /** 数据源 */
  dataSource: string;
  /** 图表配置 */
  chartConfig?: {
    type: "line" | "bar" | "pie" | "scatter" | "radar";
    xAxis?: string;
    yAxis?: string | string[];
    series?: any[];
  };
  /** 刷新间隔(秒) */
  refreshInterval?: number;
  /** 是否自动刷新 */
  autoRefresh?: boolean;
}

/**
 * 报表生成配置类型
 */
export interface WmsReportConfig {
  /** 报表类型 */
  type: "inventory" | "order" | "financial" | "custom";
  /** 报表名称 */
  name: string;
  /** 数据源 */
  dataSource: string;
  /** 查询条件 */
  filters?: Record<string, any>;
  /** 字段配置 */
  fields: Array<{
    field: string;
    label: string;
    type: "string" | "number" | "date" | "boolean";
    formatter?: (value: any) => string;
    width?: number;
  }>;
  /** 分组字段 */
  groupBy?: string[];
  /** 排序字段 */
  orderBy?: string[];
  /** 输出格式 */
  format: "excel" | "pdf" | "csv" | "html";
}
